import { Observable } from 'rxjs'
import {
  ITradeQueryParams,
  ITradePagination,
  ITradeDetailQueryParams,
  ITrade,
  ITradeStatisticQueryParams,
  ITradeStatisticPagination,
  ITradeOnlineChargeQueryParams,
  ITradeOnlineChargePagination,
  OnlineChargeAddModel,
  ITradeOnlineCharge,
  ECategoryUrl,
  ITradeRefund,
  StoreInfo,
  ITradeManualVoid,
} from '@shared/interfaces/trade'
import { IReportResponse } from '@shared/interfaces/response'


export abstract class TradeService {

  abstract getList(queryParams: ITradeQueryParams): Observable<ITradePagination>

  abstract getTransList(queryParams: ITradeQueryParams, intStoreCode: string, batchNum: string, str?: string): Observable<ITradePagination>

  abstract getOne(queryParams: ITradeDetailQueryParams, category: ECategoryUrl): Observable<ITrade>

  abstract getTradeStatistics(queryParams: ITradeStatisticQueryParams): Observable<ITradeStatisticPagination>

  abstract getTradeStatisticsReport(params: ITradeStatisticQueryParams, str?: string): Observable<IReportResponse>

  abstract getTradeListReport(params: ITradeStatisticQueryParams, str?: string): Observable<IReportResponse>

  abstract getTradeOnlineCharge(queryParams: ITradeOnlineChargeQueryParams): Observable<ITradeOnlineChargePagination>

  abstract createOnlineChargeOrder(params: OnlineChargeAddModel): Observable<any>

  abstract getChargeDetail(chargeId: string): Observable<ITradeOnlineCharge>

  abstract getStoreInfo(intStoreCode: string): Observable<StoreInfo>

  abstract getTradeOnlineChargeWithCurrency(queryParams: ITradeOnlineChargeQueryParams): Observable<any>

  abstract getChargeDetailWithCurrency(chargeId: string): Observable<any>

  abstract merchantRefund(data: ITradeRefund): Observable<boolean>

  abstract manualRefund(data: ITradeRefund): Observable<boolean>

  abstract ecPayManualRefund(data: ITradeRefund): Observable<boolean>

  abstract manualPresent(data): Observable<boolean>

  abstract manualVoid(data: ITradeManualVoid): Observable<boolean>

}
